#include "map.h"

/*函数：float map(float value,float fromLow,float fromHigh,float toLow,float toHigh)
* 说明：仿Arduino,将一个数字从一个范围重新映射到另一个范围
        也就是说，fromLow的值将映射到toLow，fromlhigh到toHigh的值等等。
* 参数：value：待映射的数值；
        fromLow：原范围的最小值
        fromHigh：原范围的最大值
        toLow：要转换的范围的最小值
        toHigh：要转换的范围的最大值
* 返回：转换后的数值
*/
float map(float value, float fromLow, float fromHigh, float toLow, float toHigh)
{
    return ((value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow);
}


/*函数：int mapChValue(int val, int lower, int middle, int upper, int reverse)
* 说明：将ADC获取的采样值转换到1000~2000，lower~middle~upper适配遥杆的范围，
        并加入正反开关的控制。
* 参数：val：该通道ADC当前采样值；
        lower：该通道遥杆最低位置时的ADC采样值；
        middle：该通道遥杆回中时的ADC采样值；
        upper：该通道遥杆最高位置时的ADC采样值；
        reverse：该通道正反开关状态，1为正常，0为反转
* 返回：该通道变换后的值(1000~2000)
*/
int mapChValue(int val, int lower, int middle, int upper, int reverse)
{
    if (val > upper) val = upper;
    if (val < lower) val = lower; // 将val限制在lower~upper范围内
    if (val < middle) {
        val = (int)map(val, lower, middle, 1000, 1500);
    } else {
        val = (int)map(val, middle, upper, 1500, 2000);
    }
    return (reverse ? 3000 - val : val);
}